#!/usr/bin/env node

const os = require('os');
const process = require('process');
const execSync = require('child_process').execSync;

//向控制台打印 CPU 架构信息以及操作系统版本信息
console.log('CPU架构',process.arch);
console.log('操作系统版本',process.platform);

//打印进程 id 信息以及 Node.js 可执行文件的绝对路径信息
console.log('进程 ID:', process.pid);
console.log('Node.js 可执行文件路径：', process.execPath);

//在脚本中增加标准输入流的读取操作，让程序暂停执行
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', () => {
  process.exit();
});

//执行 Linux 命令 ps aux，验证当前进程的 ID 信息和程序中得到的进程 ID 信息相同
const psOutput = execSync('ps aux | grep ' + process.pid).toString();
console.log('ps aux 输出：', psOutput);

//打印 Node.js 版本信息，当前登录用户 id 信息，当前登录用户所属组 id 信息以及当前脚本所在路径信息
console.log('Node.js 版本：', process.version);
console.log('当前登录用户 ID:', process.getuid());//函数调用
console.log('当前登录用户所属组 ID:', process.getgid());
console.log('当前脚本所在路径：', process.cwd());


//在命令行执行 id 命令，验证程序输出的登录账户 id 信息是否正确
//在命令行执行 pwd 命令，验证程序输出的当前工作目录信息是否正确
//打印内存使用情况
console.log('rss',process.memoryUsage().rss);//常驻内存大小
console.log('heapTotal',process.memoryUsage().headTotal);//v8动态分配堆的大小
console.log('heapUsed',process.memoryUsage().heapUsed);//v8可用内存
console.log('external',process.memoryUsage().external);//
console.log('内存使用情况：', os.totalmem() - os.freemem());

//打印环境变量
console.log('环境变量：', JSON.stringify(process.env));

//在命令行执行 env 命令，验证程序输出的环境变量信息正确
//打印编译当前 Node.js 可执行文件的配置选项
console.log('编译配置选项：', process.config);

//生成当前进程的诊断报告，查看诊断报告
console.log('诊断报告：', process.report);

//打印当前操作系统的 CPU 信息，运行 cat /proc/cpuinfo 命令，验证程序输出是否正确
console.log('CPU 信息：', execSync('cat /proc/cpuinfo').toString());

//打印当前操作系统的运行时长信息，运行 uptime 命令，验证程序输出是否正确
console.log('运行时长信息：', execSync('uptime').toString());

//打印当前操作系统的版本信息，运行 uname 命令，验证程序输出是否正确
console.log('操作系统版本信息：', execSync('uname').toString());

//打印当前操作系统的内核信息，运行 uname -a 命令，验证程序输出是否正确
console.log('内核信息：', execSync('uname -a').toString());

//打印当前操作系统的网卡信息，运行 ifconfig 命令，验证程序输出是否正确
console.log('网卡信息：', execSync('ifconfig').toString());

//打印当前操作系统的用户信息，运行 id 命令，验证程序输出是否正确
console.log('用户信息：', execSync('id').toString());